package com.hyt.it.ogt.ks.mq;

import java.util.List;
import java.util.Objects;

import javax.annotation.Resource;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.hyt.it.ogt.ks.config.ConfigManager;
import com.hyt.it.ogt.ks.model.vo.InitCandidateDataVO;

import lombok.extern.slf4j.Slf4j;

/**
 * @author wuyingge
 * @version 1.0.0
 * @ClassName InitCandidateDataProduct.java
 * @Description 手动触发考试-考生试卷初清理发送者  --- 当前使用单位机的样式去处理，暂保留
 * @createTime 2022年02月16日 15:13:00
 */
@Component
@Slf4j
public class InitCandidateDataProduct {

    @Resource
    private ConfigManager configManager;
    @Resource
    private RabbitTemplate rabbitTemplate;

    /**
     * 发布消息
     *
     * @param obj 消息体
     */
    public void sendMessage(InitCandidateDataVO obj) {
        this.sendMessage(obj, null);
    }

    /**
     * 一次发送多个消息体对象
     * @param objs
     */
    public void sendMessage(List<InitCandidateDataVO> objs){
        this.sendMessage(objs,null);
    }

    /**
     * 发布消息
     *
     * @param obj        消息体
     * @param delayTimes 延迟消息，可以为空
     */
    private void sendMessage(InitCandidateDataVO obj, final Long delayTimes) {
        //给延迟队列发送消息
        rabbitTemplate.convertAndSend(configManager.getKsDirect(), configManager.getInitCandidateDataKsRoute(), JSON.toJSONString(obj),
                message -> {
                    if (delayTimes != null) {
                        //给消息设置延迟毫秒值
                        message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
                    }
                    return message;
                });
        log.info("send json:{}", obj.toString());
    }

    /**
     * 发布消息
     *
     * @param objs       消息体
     * @param delayTimes 延迟消息，可以为空
     */
    private void sendMessage(List<InitCandidateDataVO> objs,final Long delayTimes){
        //给延迟队列发送消息
        rabbitTemplate.convertAndSend(configManager.getKsDirect(), configManager.getInitCandidateDataKsRoute(),JSON.toJSONString(objs), message -> {
            if(Objects.nonNull(delayTimes)){
                message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
            }
            return message;
        });
        log.info("send json:{}", JSON.toJSONString(objs));
    }
}
